package com.hsyt.pms.security.dao;


import com.hsyt.pms.security.entity.Function;
import com.hsyt.pms.security.entity.FunctionQueryDto;
import com.hsyt.pms.security.entity.FunctionVo;
import com.hsyt.pms.security.entity.RoleFunctionRefDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @ClassName: FunctionDao
 * @Description: 对菜单管理操作的接口
 * @author caijg@hsyuntai.com
 * @date 2017年8月28日 下午1:33:09
 */
public interface FunctionDao {
	
	/**
	 * @Title: getFunctionByCode
	 * @Description: 通过编码code查询Function是否存在
	 * @param code
	 * @return
	 */
	Function getFunctionByCode(String code);
	
	/**
	 * @Title: countFunctionByDto
	 * @Description: 根据Dto信息计算Function数量
	 * @param dto
	 * @return
	 */
	long countFunctionByDto(FunctionQueryDto dto);
	
    /**
     * @Title: insertSelective
     * @Description: 新增Function
     * @param record
     * @return
     */
    int insertSelective(Function record);

    /**
     * @Title: updateByPrimaryKeySelective
     * @Description: 通过主键Id更新Function
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Function record);
    
	/**
	 * @Title: getFunctionsByDto
	 * @Description: 根据Dto信息返回Function列表
	 * @param dto
	 * @return
	 */
	List<Function> getFunctionsByDto(FunctionQueryDto dto);

/**
	 * @Title: getFunctionsByDto
	 * @Description: 根据Dto信息返回Function列表
	 * @param dto
	 * @return
	 */
	List<Function> getFunctionsByDtoNoType(FunctionQueryDto dto);

	/**
	 * @Title: getRoleFunctionRef
	 * @Description: 通过roleId获得角色拥有的权限FunctionId数组
	 * @param roleId
	 * @return
	 */
	Long[] getRoleFunctionRef(long roleId);
	
	/**
	 * @Title: getFunctionsByPlatform
	 * @Description: 查询平台下的权限菜单
	 * @param platformType
	 * @return
	 */
	List<FunctionVo> getFunctionsByPlatform(String platformType);
	
	/**
	 * @Title: getPlatformAuthorityByUserId
	 * @Description: 查询用户在某平台下拥有的权限
	 * @param userId
	 * @param platform
	 * @return
	 */
	List<Function> getPlatformAuthorityByUserId(@Param("userId") Long userId, @Param("platform") String platform);

	/**
	 * @Title: deleteFunctionsByPrimaryKey
	 * @Description: 通过ID数组批量删除Function
	 * @param ids
	 * @return
	 */
	int deleteFunctionsByPrimaryKey(Long[] ids);

	/**
	 * @Title: deleteFucntionByCode
	 * @Description: 通过唯一索引code删除function
	 * @param id
	 * @return
	 */
	int deleteFucntionByCode(String code);

	/**
	 * @Title: roleAuthorize
	 * @Description: 角色授权
	 * @param dtos
	 */
	void roleAuthorize(List<RoleFunctionRefDto> dtos);

	/**
	 * @Title: cleanDisabledAuthority
	 * @Description: 去除不在ids里的权限
	 * @param roleId
	 * @param ids
	 */
	void cleanDisabledAuthority(@Param("roleId") Long roleId, @Param("ids") Long[] ids);


	List<FunctionVo> getFunctionListByRoleId(@Param("roleId") Long ids);
}